

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <unistd.h>
#include "snake/timer.h"
#include "snake/global.h"
#include "snake/game.h"

struct sigaction sa;
struct itimerval timer;

static void IntHandler(int s)
{
    GlobalEnd();
    printf("ctrl+c\n");
    fflush(stdout);
    exit(0);
}


static void AlrmHandler(int s)
{
    
    switch (game_status)
    {
        case 1: // 游戏开始
            GameStart();                
            break;
        case 2: // 游戏中
            GameIng();
            break;   
        case 3: // 游戏结束   
            GameEnd();
            break;
        default:
            break;
    }
    
}


void TimerPause()
{
    // 暂停定时器
    timer.it_value.tv_sec = 0;
    timer.it_value.tv_usec = 0;
    if (setitimer(ITIMER_REAL, &timer, NULL) == -1) {
        perror("Error pausing timer");
        exit(-1);
    }
}

void TimerRecover(int sec,int usec)
{
    // 恢复定时器
    timer.it_value.tv_sec = 0;
    timer.it_value.tv_usec = 1000;
    timer.it_interval.tv_sec = sec;  // 定时周期，单位：秒
    timer.it_interval.tv_usec = usec; // 定时周期，单位：微秒
    if (setitimer(ITIMER_REAL, &timer, NULL) == -1) {
        perror("Error resuming timer");
        exit(-1);
    }
}

void TimerInit(void)
{
    // 创建定时器处理函数
    sa.sa_handler = AlrmHandler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sigaction(SIGALRM, &sa, NULL);

    // 设置定时器参数
    timer.it_value.tv_sec = 0;  // 初始延迟时间，单位：秒
    timer.it_value.tv_usec = 1000; // 初始延迟时间，单位：微秒
    timer.it_interval.tv_sec = 0;  // 定时周期，单位：秒
    timer.it_interval.tv_usec = 100000; // 定时周期，单位：微秒
    // 设置定时器
    if (setitimer(ITIMER_REAL, &timer, NULL) == -1) {
        perror("Error setting timer");
        exit(-1);
    }
    signal(SIGINT,IntHandler); // ctrl+c信号

    
}



